Estoy tratando de ver si una oración está presente en la respuesta de una solicitud.
import requests r = requests.get('https://www.eventbrite.co.uk/o/piers-test-16613670281') text = 'Sorry, there are no upcoming events' if text in r.content: print('No Upcoming Events')Estoy teniendo el siguiente error:
TypeError: a bytes-like object is required, not 'str'No estoy muy seguro de por qué ocurre esto y cuál sería la solución.
r.content es un objeto de bytes pero text es str , por lo que no puede hacer la __contains__ ( in ) en otro directamente.
Puede (re)definir fácilmente el objeto de text para que sea una cadena de bytes:
text = b'Sorry, there are no upcoming events' Ahora, puede hacer if text in r.content: .
o puede usar r.text para obtener la representación de str directamente y usar el text tal cual (como str ).
r.content devuelve un objeto similar a bytes en Python 3.x. Para verificar, haga:
>>> type(r.content) <class 'bytes'>Hay varias formas de solucionar su problema. Por ejemplo:
Decodificar r.content a cadena : puede decode a cadena como:
>>> text in r.content.decode() False Convierta r.content a cadena utf-8 como:
>>> text in str(r.content, 'utf-8') False Defina su text para buscar como una cadena de bytes . Por ejemplo:
text = b'Sorry, there are no upcoming events' # ^ note the `b` here Ahora puede simplemente usarlo con r.content como:
>>> text in r.content False Use r.text en lugar de r.content para buscar la cadena, que como sugiere el documento :
La codificación de texto adivinada por Solicitudes se usa cuando accede a
r.text.
Por lo tanto, puede simplemente hacer:
>>> text in r.text FalseLas solicitudes devuelven un objeto de bytes, debe convertirlo en una cadena antes de realizar la entrada
Aquí hay una referencia sobre tipos integrados, uno de los cuales es bytes https://docs.python.org/3/library/stdtypes.html
la línea de código que estás buscando es algo así como,
if text in r.content.decode(): print('No upcoming events')por defecto, la decodificación asume utf-8, aunque puede pasar una codificación diferente si lo necesita.